--------------------------------------------------------------------------------
-------------------------------========+*+++++==--------------------------------
------------------------------==+++***#%#%%%%%##*+===---------------------------
------------------------======+*#%%%%%%##%%%%%%%%%#*+=--------------------------
--------------------==-=====+*%@%%###***+++++***##%%%#+=------------------------
-------------------=====+**#%%#*+++++===========+++*#%%*=-----------------------
------------------=-====+%%%#++====================+++#%*+==--------------------
------------------=====+#@%*+++=====================+++*%#+===------------------
-------------------===+%@#+++++======================+++*%#+===-----------------
-------------------==+%@#+++++++=====================++++*%*==------------------
------------------==+#@#*++++++=======================+++*##+=------------------
-----------------===+%%*++++++++=============++***#**+++++#%*==-----------------
-----------------===#%#*+++*######**+======+*##%%####**+++*%#==-----------------
----------------===+#%#++**#%%######*+=====+*++++=++++**+++%#==-----------------
---------------====+%%#+**#**++++++***+====+++******+++++++##=------------------
----------------===+#%#+******######**++==+++*#*#%%##*+++++#+-------------------
----------------====*%#+++**#%%%#*****+++=++++*****++++++++#=-------------------
---------------=====+#%++++++++++++++*+++++++++++=====+++++#*+=-----------------
---------------====+*#%++++++++++++++++++++++++========++++**=------------------
-------------=====++*##++++++++==+++++++==+++++=======++++++==------------------
-------------======++***+++++++===+****+++***++=======+++++++=------------------
---------============+**++++++===++**##****##*++=======++++++=------------------
------===============+**++++++==++++*********++++======+++=+=-------------------
-----=================++++++++=++++*****+++***++++====++++==--------------------
----===================+*+++++++**+**+++++++++++++++=++++==---------------------
---=-===================+++++++++****************++++++++-----------------------
-=======================+++++++++**#####****###**+++++++=-----------------------
-=======================+*++++++++++**********++++++++++=-----------------------
========================++*++++****++++*****++++++++++*=------------------------
========================+++************+++++++++++++**+=------------------------
=======================++++*****+++++++++++++++++*****+-------------------------
=======================++++++*******+++++++**++***#*++======--------------------
======================+++++++++*#******************+++========------------------
====================++++++++++++****########*#***+++++**+=======----------------
=================++++++++++++++++++***********+++++++++++=========--------------
============++++++++++++++**++++++++++++++++++++++++++===============-----------
=========++++++++++++++++***+++++++++++++++++++++++++++===============----------
======+++++++++++++++++***+++++++++++++++++++++=+++++++++++++==========---------
=====++++++++++++++++**##++++++++===+++==========+++++++**+++++++========-------
===++++++++++++++***#%%%*+++++++++===============+++++++*%#**+++++++=======-----